home *** CD-ROM | disk | FTP | other *** search
/ Amiga Tools 5 / Amiga Tools 5.iso / grafik / 3d & render tools / irit / contrib / scripts / spider.irt < prev    next >
Encoding:
Text File  |  1996-07-16  |  31.2 KB  |  1,223 lines

  1. #
  2. #  Samoylov Tatiana and Gontmakher Alex
  3. #
  4.  
  5. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  6. #$$ jaw_seg
  7.  
  8. jaw_arc = cbezier(list(
  9.   ctlpt(E3,    0,    0.15,    0),
  10.   ctlpt(E3,    -0.1,    0.15,    0),
  11.   ctlpt(E3,    0.2,    0.2,    0),
  12.   ctlpt(E3,    0.27,    0.15,    0),
  13.   ctlpt(E3,    0.4,    0.11,    0),
  14.   ctlpt(E3,    0.5,    -0.05,    0),
  15.   ctlpt(E3,    0.48,    -0.1,    0)));
  16.  
  17. w1 = 5;
  18. jaw_scale = cbspline(3,
  19.   list(ctlpt(e3, 0,    0,    0),
  20.        ctlpt(e3, 0,    0.28,    0),
  21.        ctlpt(e3, 0.09,    0.2,    0),
  22.        ctlpt(p3, w1,    0.12*w1,    0.2*w1,    0*w1),
  23.        ctlpt(p3, w1,    0.5*w1,        0.2*w1,    0*w1),
  24.        ctlpt(p3, w1,    0.9*w1,    0.17*w1,0*w1),
  25.        ctlpt(e3, 1,    0.01,    0),
  26.        ctlpt(e3, 1,    0.0,    0)),
  27.   list(KV_OPEN));
  28.  
  29. jaw_cut = circle(vector(0,0,0),0.4);
  30.  
  31. jaw_seg = swpsclsrf( jaw_cut, jaw_arc, jaw_scale, off, 1 ) 
  32.          * trans(vector(0,-0.18,0));
  33. attrib(jaw_seg, "rgb", "255,255,255");
  34. attrib(jaw_seg, "reflect", 1.0);
  35.  
  36. jaw_seg_m = swpsclsrf( jaw_cut, jaw_arc * scale(vector(-1,1,1)), 
  37.                        jaw_scale, off, 1 ) 
  38.          * trans(vector(0,-0.18,0));
  39. attrib(jaw_seg_m, "rgb", "255,255,255");
  40. free(jaw_scale);
  41. free(jaw_arc);
  42. free(jaw_cut);
  43.  
  44. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  45. #$$$ segment 1 of the leg
  46.  
  47. leg_seg1_arc = cbezier(list(
  48.   ctlpt(E3,0,0,0),
  49.   ctlpt(E3,-0.1,0,0),
  50.   ctlpt(E3,0.5,0.2,0),
  51.   ctlpt(E3,1.1,-0.05,0),
  52.   ctlpt(E3,1,0,0)));
  53.  
  54. w1 = 5;
  55. leg_seg1_scale = cbspline(3,
  56.   list(ctlpt(e3, 0,0,0),
  57.        ctlpt(e3, 0,0.08,0),
  58.        ctlpt(e3, 0.09,0.1,0),
  59.        ctlpt(p3, w1,0.12*w1,0.2*w1,0*w1),
  60.        ctlpt(p3, w1,0.5*w1,0.3*w1,0*w1),
  61.        ctlpt(p3, w1,0.87*w1,0.09*w1,0*w1),
  62.        ctlpt(e3, 0.9,0.12,0),
  63.        ctlpt(e3, 1,0.25,0),
  64.        ctlpt(e3, 1,0.01,0)),
  65.   list(KV_OPEN));
  66.  
  67. leg_seg1_cut = circle(vector(0,0,0),0.5);
  68. leg_seg1 = swpsclsrf( leg_seg1_cut, leg_seg1_arc, leg_seg1_scale, off, 1 );
  69. attrib(leg_seg1, "rgb", "120,120,120");
  70.  
  71. leg_seg1_m = swpsclsrf( leg_seg1_cut, leg_seg1_arc * scale(vector(-1,1,1)),
  72.                         leg_seg1_scale, off, 1 );
  73. attrib(leg_seg1_m, "rgb", "120,120,120");
  74.  
  75. free(leg_seg1_scale);
  76. free(leg_seg1_arc);
  77. free(leg_seg1_cut);
  78.  
  79. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  80. #$$ segment 2 of the leg
  81.  
  82. leg_seg2_arc = cbezier(list(
  83.   ctlpt(E3,    0,    0,    0),
  84.   ctlpt(E3,    -0.1,    0,    0),
  85.   ctlpt(E3,    0.5,    0.1,    0),
  86.   ctlpt(E3,    1.1,    -0.05,    0),
  87.   ctlpt(E3,    1,    0,    0)));
  88.  
  89. w1 = 5;
  90. leg_seg2_scale = cbspline(3,
  91.   list(ctlpt(e3, 0,    0,    0),
  92.        ctlpt(e3, 0,    0.08,    0),
  93.        ctlpt(e3, 0.09,    0.1,    0),
  94.        ctlpt(p3, w1,    0.12*w1,    0.2*w1,    0*w1),
  95.        ctlpt(p3, w1,    0.5*w1,        0.3*w1,    0*w1),
  96.        ctlpt(p3, w1,    0.65*w1,    0.17*w1,0*w1),
  97.        ctlpt(e3, 0.9,    0.12,    0),
  98.        ctlpt(e3, 1,    0.03,    0),
  99.        ctlpt(e3, 1,    0.01,    0)),
  100.   list(KV_OPEN));
  101. leg_seg2_cut = circle(vector(0,0,0),0.5);
  102.  
  103. leg_seg2 = swpsclsrf( leg_seg2_cut, leg_seg2_arc, leg_seg2_scale, off, 1 );
  104. attrib(leg_seg2, "rgb", "100,100,100");
  105.  
  106. leg_seg2_m = swpsclsrf( leg_seg2_cut, leg_seg2_arc * scale(vector(-1,1,1)),
  107.                         leg_seg2_scale, off, 1 );
  108. attrib(leg_seg2_m, "rgb", "100,100,100");
  109. free(leg_seg2_scale);
  110. free(leg_seg2_arc);
  111. free(leg_seg2_cut);
  112.  
  113. #$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
  114. #$$ segment 3 of the leg
  115.  
  116. leg_seg3_arc = cbezier(list(
  117.   ctlpt(E3,    0,    0,    0),
  118.   ctlpt(E3,    -0.1,    0,    0),
  119.   ctlpt(E3,    0.2,    0.15,    0),
  120.   ctlpt(E3,    0.22,    0.15,    0),
  121.   ctlpt(E3,    0.4,    0.03,    0),
  122.   ctlpt(E3,    1.1,    -0.05,    0),
  123.   ctlpt(E3,    1,    0,    0)));
  124.  
  125. w1 = 5;
  126. leg_seg3_scale = cbspline(3,
  127.   list(ctlpt(e3, 0,    0,    0),
  128.        ctlpt(e3, 0,    0.28,    0),
  129.        ctlpt(e3, 0.09,    0.2,    0),
  130.        ctlpt(p3, w1,    0.12*w1,    0.2*w1,    0*w1),
  131.        ctlpt(p3, w1,    0.5*w1,        0.2*w1,    0*w1),
  132.        ctlpt(p3, w1,    0.9*w1,    0.17*w1,0*w1),
  133.        ctlpt(e3, 0.9,    0.26,    0),
  134.        ctlpt(e3, 1,    0.23,    0),
  135.        ctlpt(e3, 1,    0.01,    0)),
  136.   list(KV_OPEN));
  137.  
  138. leg_seg3_cut = circle(vector(0,0,0),0.3);
  139.  
  140. leg_seg3 = swpsclsrf( leg_seg3_cut, leg_seg3_arc, leg_seg3_scale, off, 1 );
  141. attrib(leg_seg3, "rgb", "50,50,50");
  142.  
  143. leg_seg3_m = swpsclsrf( leg_seg3_cut, leg_seg3_arc * scale(vector(-1,1,1)), 
  144.                         leg_seg3_scale, off, 1 );
  145. attrib(leg_seg3_m, "rgb", "50,50,50");
  146.  
  147. free(leg_seg3_scale);
  148. free(leg_seg3_arc);
  149. free(leg_seg3_cut);
  150. ######################################
  151. ### segment 4
  152. leg_seg4_arc = cbezier(list(
  153.   ctlpt(E3,0,0,0),
  154.   ctlpt(E3,-0.1,0,0),
  155.   ctlpt(E3,0.5,-0.05,0),
  156.   ctlpt(E3,1.1,0.01,0),
  157.   ctlpt(E3,1,0,0)));
  158.  
  159. w1 = 5;
  160. leg_seg4_scale = cbspline(3,
  161.   list(ctlpt(e3, 0,0,0),
  162.        ctlpt(e3, 0,0.25,0),
  163.        ctlpt(e3, 0.09,0.13,0),
  164.        ctlpt(p3, w1,0.12*w1,0.10*w1,0*w1),
  165.        ctlpt(p3, w1,0.87*w1,0.09*w1,0*w1),
  166.        ctlpt(e3, 0.9,0.12,0),
  167.        ctlpt(e3, 1,0.25,0),
  168.        ctlpt(e3, 1,0.01,0)),
  169.   list(KV_OPEN));
  170.  
  171. leg_seg4_cut = circle(vector(0,0,0),0.40);
  172.  
  173. leg_seg4 = swpsclsrf( leg_seg4_cut, leg_seg4_arc, leg_seg4_scale, off, 1 );
  174. attrib(leg_seg4, "rgb", "120,120,120");
  175.  
  176. leg_seg4_m = swpsclsrf( leg_seg4_cut, leg_seg4_arc * scale(vector(-1,1,1)), 
  177.                         leg_seg4_scale, off, 1 );
  178. attrib(leg_seg4_m, "rgb", "120,120,120");
  179.  
  180. free(leg_seg4_scale);
  181. free(leg_seg4_cut);
  182. free(leg_seg4_arc);
  183. ######################################
  184. ### segment 5
  185. leg_seg5_arc = cbezier(list(
  186.   ctlpt(E3,0,0,0),
  187.   ctlpt(E3,-0.1,0,0),
  188.   ctlpt(E3,0.5,0.08,0),
  189.   ctlpt(E3,1.1,-0.02,0),
  190.   ctlpt(E3,1,0,0)));
  191.  
  192. w1 = 5;
  193. leg_seg5_scale = cbspline(3,
  194.   list(ctlpt(e3, 0,0,0),
  195.        ctlpt(e3, 0,0.25,0),
  196.        ctlpt(e3, 0.09,0.13,0),
  197.        ctlpt(p3, w1,0.12*w1,0.25*w1,0*w1),
  198.        ctlpt(p3, w1,0.87*w1,0.19*w1,0*w1),
  199.        ctlpt(e3, 0.9,0.12,0),
  200.        ctlpt(e3, 1,0.25,0),
  201.        ctlpt(e3, 1,0.01,0)),
  202.   list(KV_OPEN));
  203.  
  204. leg_seg5_cut = circle(vector(0,0,0),0.50);
  205.  
  206. leg_seg5 = swpsclsrf( leg_seg5_cut, leg_seg5_arc, leg_seg5_scale, off, 1 );
  207. attrib(leg_seg5, "rgb", "192,192,192");
  208.  
  209. leg_seg5_m = swpsclsrf( leg_seg5_cut, leg_seg5_arc * scale(vector(-1,1,1)), 
  210.                         leg_seg5_scale, off, 1 );
  211. attrib(leg_seg5_m, "rgb", "192,192,192");
  212.  
  213. free(leg_seg5_scale);
  214. free(leg_seg5_cut);
  215. free(leg_seg5_arc);
  216.  
  217. ######################################
  218. ### leg 0
  219.  
  220. leg0_arc = cbspline(3,
  221.   list(
  222.      ctlpt(E3,1,0,0),
  223.      ctlpt(E3,1.1,-0.02,0),
  224.      ctlpt(E3,0.6,0.5,0),
  225.      ctlpt(E3,0.35,0.5,0),
  226.      ctlpt(E3,-0.1,0,0),
  227.      ctlpt(E3,0,0,0)
  228.      ),
  229.    list(KV_OPEN));
  230.  
  231. w1 = 5;
  232. leg0_scale = cbspline(3,
  233.   list(ctlpt(e3, 0,0,0),
  234.        ctlpt(e3, 0,0.43,0),
  235.        ctlpt(e3, 0.3,0.35,0),
  236.        ctlpt(p3, w1,0.12*w1,0.25*w1,0*w1),
  237.        ctlpt(p3, w1,0.87*w1,0.19*w1,0*w1),
  238.        ctlpt(e3, 0.9,0.12,0),
  239.        ctlpt(e3, 1,0.25,0),
  240.        ctlpt(e3, 1,0.01,0)),
  241.   list(KV_OPEN));
  242.  
  243. leg0_cut = circle(vector(0,0,0),0.50);
  244.  
  245. leg0_seg = swpsclsrf( leg0_cut, leg0_arc, leg0_scale, off, 1 );
  246.  
  247. leg0_seg_m = swpsclsrf( leg0_cut, leg0_arc * scale(vector(-1,1,1)),
  248.                         leg0_scale, off, 1 );
  249.  
  250. leg0 = leg0_seg * scale(vector(0.7,0.7,0.7))
  251.   * rotz(-120);
  252. leg0_m = leg0_seg_m * scale(vector(0.7,0.7,0.7))
  253.   * rotz(120);
  254.  
  255. attrib(leg0, "rgb", "100,100,100");
  256. attrib(leg0_m, "rgb", "100,100,100");
  257.  
  258. free(leg0_seg_m);
  259. free(leg0_seg);
  260. free(leg0_scale);
  261. free(leg0_arc);
  262. free(leg0_cut);
  263. ######################################
  264. ### leg 1
  265.  
  266. leg1_seg1_trans = rotz(-30) * roty(25);
  267. leg1_seg1_dv = vector(1,-0.02,0) * leg1_seg1_trans;
  268. leg1_seg2_trans = scale(vector(1.5,1,1)) * rotz(-90) * rotx(-10)
  269.                  *  trans(leg1_seg1_dv);
  270. leg1_seg2_dv = vector(1,0,0) * leg1_seg2_trans;
  271. leg1_seg3_trans = rotz(-110) * roty(90) * rotx(-10) * rotz(-20) * trans(vector(-0.02,-0.05,0))
  272.                  *  trans(leg1_seg2_dv);
  273.  
  274. leg1_seg1_trans_m = rotz(30) * 
  275.                   roty(-25);
  276. leg1_seg1_dv_m = vector(-1,-0.02,0) * 
  277.                leg1_seg1_trans_m;
  278. leg1_seg2_trans_m = scale(vector(1.5,1,1)) * 
  279.                   rotz(90) * rotx(-10) *
  280.           trans(leg1_seg1_dv_m);
  281. leg1_seg2_dv_m = vector(-1,0,0) * leg1_seg2_trans_m;
  282. leg1_seg3_trans_m = rotz(110) * roty(-90) * 
  283.                   rotx(-10) * rotz(20) * trans(vector(0.02,0.05,0)) *
  284.                   trans(leg1_seg2_dv_m);
  285.  
  286. leg1 = list(leg_seg1 * leg1_seg1_trans,
  287.             leg_seg2 * leg1_seg2_trans,
  288.         leg_seg3 * leg1_seg3_trans,
  289.         trans(vector(1.15,-0.97,0.03)));
  290.  
  291. leg1_m = list(leg_seg1_m * leg1_seg1_trans_m,
  292.                leg_seg2_m * leg1_seg2_trans_m,
  293.            leg_seg3_m * leg1_seg3_trans_m,
  294.            trans(vector(1.15,0.97,-0.03)));
  295.  
  296. free(leg1_seg3_trans);
  297. free(leg1_seg2_trans);
  298. free(leg1_seg1_trans);
  299. free(leg1_seg2_dv);
  300. free(leg1_seg1_dv);
  301.  
  302. free(leg1_seg3_trans_m);
  303. free(leg1_seg2_trans_m);
  304. free(leg1_seg1_trans_m);
  305. free(leg1_seg2_dv_m);
  306. free(leg1_seg1_dv_m);
  307.  
  308. ######################################
  309. ### leg 2
  310.  
  311. leg2_seg1_trans = roty(15);
  312. leg2_seg1_dv = vector(1,0,0) * leg2_seg1_trans;
  313. leg2_seg2_trans = rotz(-70) * rotx(-10)
  314.                  *  trans(leg2_seg1_dv);
  315. leg2_seg2_dv = vector(1,0,0) * leg2_seg2_trans;
  316. leg2_seg3_trans = rotz(-110) * roty(90) * rotx(-10) * trans(vector(-0.02,0.05,0)) 
  317.                  *  trans(leg2_seg2_dv);
  318.  
  319. leg2_seg1_trans_m = roty(-15);
  320. leg2_seg1_dv_m = vector(-1,0,0) * leg2_seg1_trans_m;
  321. leg2_seg2_trans_m = rotz(70) * rotx(-10) *
  322.                     trans(leg2_seg1_dv_m);
  323. leg2_seg2_dv_m = vector(-1,0,0) * leg2_seg2_trans_m;
  324. leg2_seg3_trans_m = rotz(110) * roty(-90) * 
  325.                   rotx(-10) * trans(vector(0.02,-0.05,0)) *
  326.                   trans(leg2_seg2_dv_m);
  327.  
  328.  
  329. leg2 = list(leg_seg1 * leg2_seg1_trans,
  330.             leg_seg2 * leg2_seg2_trans,
  331.         leg_seg3 * leg2_seg3_trans,
  332.         trans(vector(1.15,-0.97,0.03)));
  333.  
  334. leg2_m = list(leg_seg1_m * leg2_seg1_trans_m,
  335.             leg_seg2_m * leg2_seg2_trans_m,
  336.         leg_seg3_m * leg2_seg3_trans_m,
  337.         trans(vector(1.15,0.97,-0.03)));
  338.  
  339. free(leg2_seg3_trans);
  340. free(leg2_seg2_trans);
  341. free(leg2_seg1_trans);
  342. free(leg2_seg2_dv);
  343. free(leg2_seg1_dv);
  344.  
  345. free(leg2_seg3_trans_m);
  346. free(leg2_seg2_trans_m);
  347. free(leg2_seg1_trans_m);
  348. free(leg2_seg2_dv_m);
  349. free(leg2_seg1_dv_m);
  350.  
  351. ######################################
  352. ### leg 3
  353.  
  354. leg3_seg1_trans = rotz(20) * roty(15);
  355. leg3_seg1_dv = vector(1,0,0) * leg3_seg1_trans;
  356. leg3_seg2_trans = rotx(180) * scale(vector(1.4,1,1)) * rotz(15) * roty(-10) * rotx(-10);
  357. leg3_seg2_dv =  vector(1,0,0) * leg3_seg2_trans;
  358. leg3_seg3_trans =  scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(20) * roty(-36) * rotx(-10); 
  359.  
  360. leg3_seg1_trans_m = rotz(-20) * roty(-15);
  361. leg3_seg1_dv_m = vector(-1,0,0) * leg3_seg1_trans_m;
  362. leg3_seg2_trans_m = rotx(180) * scale(vector(1.4,1,1)) * rotz(-15) * roty(10) * rotx(-10);
  363. leg3_seg2_dv_m =  vector(-1,0,0) * leg3_seg2_trans_m;
  364. leg3_seg3_trans_m =  scale(vector(0.8,0.6,1)) * rotx(-90) * rotz(-20) * roty(36) * rotx(-10); 
  365.  
  366.  
  367. leg3 = list(leg_seg5 * leg3_seg1_trans,
  368.             leg_seg4 * leg3_seg2_trans * trans(leg3_seg1_dv), 
  369.         leg_seg3 * leg3_seg3_trans * trans(leg3_seg1_dv) * 
  370.         trans(leg3_seg2_dv));
  371.  
  372. leg3_m = list(leg_seg5_m * leg3_seg1_trans_m,
  373.             leg_seg4_m * leg3_seg2_trans_m * trans(leg3_seg1_dv_m), 
  374.         leg_seg3_m * leg3_seg3_trans_m * trans(leg3_seg1_dv_m) * 
  375.         trans(leg3_seg2_dv_m));
  376.  
  377. free(leg3_seg2_dv);
  378. free(leg3_seg1_dv);
  379. free(leg3_seg3_trans);
  380. free(leg3_seg2_trans);
  381. free(leg3_seg1_trans);
  382.  
  383. free(leg3_seg2_dv_m);
  384. free(leg3_seg1_dv_m);
  385. free(leg3_seg3_trans_m);
  386. free(leg3_seg2_trans_m);
  387. free(leg3_seg1_trans_m);
  388.  
  389. ######################################
  390. ### leg 4
  391.  
  392. leg4_seg1_trans = rotz(50) * roty(15);
  393. leg4_seg1_dv = 
  394.   vector(1,0,0) *
  395.   leg4_seg1_trans;
  396. leg4_seg2_trans = rotx(180) *
  397.   scale(vector(1.4,1,1)) * 
  398.   rotz(56) * 
  399.   roty(-10) * 
  400.   rotx(-10);
  401. leg4_seg2_dv =
  402.   vector(1,0,0) * 
  403.   leg4_seg2_trans;
  404. leg4_seg3_trans =
  405.   scale(vector(0.8,0.6,1)) * 
  406.   rotx(-90) * 
  407.   rotz(56) * roty(-36) * rotx(15); 
  408.  
  409. leg4_seg1_trans_m = rotz(-50) * roty(-15);
  410. leg4_seg1_dv_m = 
  411.   vector(-1,0,0) *
  412.   leg4_seg1_trans_m;
  413. leg4_seg2_trans_m = rotx(180) *
  414.   scale(vector(1.4,1,1)) * 
  415.   rotz(-56) * 
  416.   roty(10) * 
  417.   rotx(-10);
  418. leg4_seg2_dv_m =
  419.   vector(-1,0,0) * 
  420.   leg4_seg2_trans_m;
  421. leg4_seg3_trans_m =
  422.   scale(vector(0.8,0.6,1)) * 
  423.   rotx(-90) * 
  424.   rotz(-56) * roty(36) * rotx(15); 
  425.  
  426.  
  427. leg4 = list(leg_seg5 * leg4_seg1_trans,
  428.             leg_seg4 * leg4_seg2_trans * trans(leg4_seg1_dv), 
  429.         leg_seg3 * leg4_seg3_trans * trans(leg4_seg1_dv) * 
  430.         trans(leg4_seg2_dv));
  431.  
  432. leg4_m = list(leg_seg5_m * leg4_seg1_trans_m,
  433.             leg_seg4_m * leg4_seg2_trans_m * trans(leg4_seg1_dv_m), 
  434.         leg_seg3_m * leg4_seg3_trans_m * trans(leg4_seg1_dv_m) * 
  435.         trans(leg4_seg2_dv_m));
  436.  
  437. free(leg4_seg2_dv);
  438. free(leg4_seg1_dv);
  439. free(leg4_seg3_trans);
  440. free(leg4_seg2_trans);
  441. free(leg4_seg1_trans);
  442.  
  443. free(leg4_seg2_dv_m);
  444. free(leg4_seg1_dv_m);
  445. free(leg4_seg3_trans_m);
  446. free(leg4_seg2_trans_m);
  447. free(leg4_seg1_trans_m);
  448.  
  449. ######################################
  450. ### jaw
  451.  
  452. jaw_seg1_trans = scale(vector(0.5,1.1,1));
  453. jaw_seg1_dv = vector(1,0,0) * jaw_seg1_trans;
  454. jaw_seg2_trans = scale(vector(0.3,0.83,0.78));
  455. jaw_seg2_dv =  vector(1,0,0) * jaw_seg2_trans;
  456.  
  457. jaw_seg1_trans_m = scale(vector(0.5,1.1,1));
  458. jaw_seg1_dv_m = vector(-1,0,0) * jaw_seg1_trans_m;
  459. jaw_seg2_trans_m = scale(vector(0.3,0.83,0.78));
  460. jaw_seg2_dv_m =  vector(-1,0,0) * jaw_seg2_trans_m;
  461.  
  462.  
  463. jaw = list(leg_seg5 * jaw_seg1_trans,
  464.             jaw_seg * jaw_seg2_trans * trans(jaw_seg1_dv), 
  465.         trans(jaw_seg2_dv))
  466.         * rotx(-90) * roty(-90) * 
  467.         scale(vector(1.5,1,1)) * roty(-10);
  468.  
  469. jaw_m = list(leg_seg5_m * jaw_seg1_trans_m,
  470.             jaw_seg_m * jaw_seg2_trans_m * trans(jaw_seg1_dv_m), 
  471.         trans(jaw_seg2_dv_m))
  472.         * rotx(-90) * roty(90) * 
  473.         scale(vector(1.5,1,1)) * roty(10);
  474.  
  475.  
  476. free(jaw_seg2_dv);
  477. free(jaw_seg1_dv);
  478. free(jaw_seg2_trans);
  479. free(jaw_seg1_trans);
  480.  
  481. free(jaw_seg2_dv_m);
  482. free(jaw_seg1_dv_m);
  483. free(jaw_seg2_trans_m);
  484. free(jaw_seg1_trans_m);
  485. ######################################
  486. ### the bottom of the head
  487. head_bottom_mesh = list(
  488. list(
  489.   ctlpt(e3,    0,    0.5,    1),
  490.   ctlpt(e3,    0,    1.5,    1),
  491.   ctlpt(e3,    0,    2.5,    1),
  492.   ctlpt(e3,    0,    4,    1),
  493.   ctlpt(e3,    0,    6,    1),
  494.   ctlpt(e3,    0,    8,    1),
  495.   ctlpt(e3,    0,    9,    0.7)
  496. ),list(
  497.   ctlpt(e3,    1.5,    0.5,    1),
  498.   ctlpt(e3,    1.1,    1.5,    1),
  499.   ctlpt(e3,    1.2,    2.5,    1),
  500.   ctlpt(e3,    1.2,    4,    1),
  501.   ctlpt(e3,    1.1,    6,    1),
  502.   ctlpt(e3,    1,    8,    1),
  503.   ctlpt(e3,    0.9,    9,    0.7)
  504. ),list(
  505.   ctlpt(e3,    1.8,    0,    0.7),
  506.   ctlpt(e3,    2.2,    1,    0.7),
  507.   ctlpt(e3,    2.8,    2,    0.7),
  508.   ctlpt(e3,    2.9,    4.5,    0.7),
  509.   ctlpt(e3,    2.5,    6.5,    0.7),
  510.   ctlpt(e3,    1.9,    8.2,    0.7),
  511.   ctlpt(e3,    1.3,    9,    0.7)
  512. ),list(
  513.   ctlpt(e3,    1.8,    0,    0.1),
  514.   ctlpt(e3,    2.6,    0.9,    0.1),
  515.   ctlpt(e3,    3.3,    2,    0.1),
  516.   ctlpt(e3,    3.4,    5,    0.1),
  517.   ctlpt(e3,    2.1,    7,    0.1),
  518.   ctlpt(e3,    1.6,    8.5,    0.1),
  519.   ctlpt(e3,    1.4,    9,    0.1)
  520. ),list(
  521.   ctlpt(e3,    0.0,    0,    0),
  522.   ctlpt(e3,    2.8,    0.8,    0),
  523.   ctlpt(e3,    3.5,    2,    0),
  524.   ctlpt(e3,    3.5,    5,    0),
  525.   ctlpt(e3,    2.2,    7.1,    0),
  526.   ctlpt(e3,    1.8,    8.5,    0),
  527.   ctlpt(e3,    1.5,    9,    0)
  528. )
  529. );
  530.  
  531. head_bottom_mesh_m = list(
  532. list(
  533.   ctlpt(e3,    -0.0,    0,    0),
  534.   ctlpt(e3,    -2.8,    0.8,    0),
  535.   ctlpt(e3,    -3.5,    2,    0),
  536.   ctlpt(e3,    -3.5,    5,    0),
  537.   ctlpt(e3,    -2.2,    7.1,    0),
  538.   ctlpt(e3,    -1.8,    8.5,    0),
  539.   ctlpt(e3,    -1.5,    9,    0)
  540. ),list(
  541.   ctlpt(e3,    -1.8,    0,    0.1),
  542.   ctlpt(e3,    -2.6,    0.9,    0.1),
  543.   ctlpt(e3,    -3.3,    2,    0.1),
  544.   ctlpt(e3,    -3.4,    5,    0.1),
  545.   ctlpt(e3,    -2.1,    7,    0.1),
  546.   ctlpt(e3,    -1.6,    8.5,    0.1),
  547.   ctlpt(e3,    -1.4,    9,    0.1)
  548. ),list(
  549.   ctlpt(e3,    -1.8,    0,    0.7),
  550.   ctlpt(e3,    -2.2,    1,    0.7),
  551.   ctlpt(e3,    -2.8,    2,    0.7),
  552.   ctlpt(e3,    -2.9,    4.5,    0.7),
  553.   ctlpt(e3,    -2.5,    6.5,    0.7),
  554.   ctlpt(e3,    -1.9,    8.2,    0.7),
  555.   ctlpt(e3,    -1.3,    9,    0.7)
  556. ),list(
  557.   ctlpt(e3,    -1.5,    0.5,    1),
  558.   ctlpt(e3,    -1.1,    1.5,    1),
  559.   ctlpt(e3,    -1.2,    2.5,    1),
  560.   ctlpt(e3,    -1.2,    4,    1),
  561.   ctlpt(e3,    -1.1,    6,    1),
  562.   ctlpt(e3,    -1,    8,    1),
  563.   ctlpt(e3,    -0.9,    9,    0.7)
  564. ),list(
  565.   ctlpt(e3,    -0,    0.5,    1),
  566.   ctlpt(e3,    -0,    1.5,    1),
  567.   ctlpt(e3,    -0,    2.5,    1),
  568.   ctlpt(e3,    -0,    4,    1),
  569.   ctlpt(e3,    -0,    6,    1),
  570.   ctlpt(e3,    -0,    8,    1),
  571.   ctlpt(e3,    -0,    9,    0.7)
  572. )
  573. );
  574.  
  575. head_bottom_half = sbspline(3, 3, head_bottom_mesh,
  576.                             list(list(KV_OPEN), 
  577.                 list(KV_OPEN)));
  578.  
  579. head_bottom_half_m = sbspline(3, 3, head_bottom_mesh_m,
  580.                             list(list(KV_OPEN), 
  581.                 list(KV_OPEN)));
  582.  
  583. head_scale_factor = scale(vector(0.2,0.2,0.2));
  584. head_bottom = list(
  585.     head_bottom_half * scale(vector(-1,1,1)),
  586.     head_bottom_half_m * scale(vector(-1,1,1)) ) *
  587.     head_scale_factor;
  588.  
  589. free(head_bottom_half);
  590. free(head_bottom_half_m);
  591. free(head_bottom_mesh);
  592.  
  593. ######################################
  594. ### the top of the head
  595. head_top_mesh = list(
  596. list(
  597.   ctlpt(e3,    0,    -1,    .12),
  598.   ctlpt(e3,    0,    -0.5,    3),
  599.   ctlpt(e3,    0,    2.0,    3.2),
  600.   ctlpt(e3,    0,    4,    3),
  601.   ctlpt(e3,    0,    6,    2.8),
  602.   ctlpt(e3,    0,    8,    2.0),
  603.   ctlpt(e3,    0,    9,    1.5)
  604. ),list(
  605.   ctlpt(e3,    0.18,    -1,    .12),
  606.   ctlpt(e3,    0.18,    -0.5,    3),
  607.   ctlpt(e3,    0.18,    2.0,    3.2),
  608.   ctlpt(e3,    0.18,    4,    3),
  609.   ctlpt(e3,    0.18,    6,    2.8),
  610.   ctlpt(e3,    0.18,    8,    2.0),
  611.   ctlpt(e3,    0.18,    9,    1.5)
  612. ),list(
  613.   ctlpt(e3,    0.0,    -1,    0.118),
  614.   ctlpt(e3,    1.5,    -0.5,    2.6),
  615.   ctlpt(e3,    2.4,    2.0,    3.1),
  616.   ctlpt(e3,    2.6,    4,    2.9),
  617.   ctlpt(e3,    1.5,    6,    2.2),
  618.   ctlpt(e3,    1.0,    8,    1.9),
  619.   ctlpt(e3,    0.9,    9,    1.4)
  620. ),list(
  621.   ctlpt(e3,    0.0,    -1,    0.35),
  622.   ctlpt(e3,    2.2,    -0.6,    1.2),
  623.   ctlpt(e3,    2.8,    2.5,    2.7),
  624.   ctlpt(e3,    2.9,    4,    2.7),
  625.   ctlpt(e3,    1.8,    6.5,    2.3),
  626.   ctlpt(e3,    1.2,    8.2,    2.0),
  627.   ctlpt(e3,    1.3,    9,    1.35)
  628. ),list(
  629.   ctlpt(e3,    0.1,    -1,    0.3),
  630.   ctlpt(e3,    2.6,    -0.8,    1.1),
  631.   ctlpt(e3,    3.3,    2,    1.0),
  632.   ctlpt(e3,    3.4,    5,    1.0),
  633.   ctlpt(e3,    2.0,    7,    1.0),
  634.   ctlpt(e3,    1.6,    8.5,    1.0),
  635.   ctlpt(e3,    1.4,    9,    1.0)
  636. ),list(
  637.   ctlpt(e3,    0.0,    -1,    0.2),
  638.   ctlpt(e3,    2.7,    -0.8,    0.5),
  639.   ctlpt(e3,    3.4,    2,    0.5),
  640.   ctlpt(e3,    3.3,    5,    0.5),
  641.   ctlpt(e3,    2.1,    7.1,    0.5),
  642.   ctlpt(e3,    1.8,    8.5,    0.5),
  643.   ctlpt(e3,    1.5,    9,    0.5)
  644. ),list(
  645.   ctlpt(e3,    0.0,    -1,    0.1),
  646.   ctlpt(e3,    3.0,    -0.8,    0.2),
  647.   ctlpt(e3,    3.7,    2,    0.2),
  648.   ctlpt(e3,    3.6,    5,    0.2),
  649.   ctlpt(e3,    2.4,    7.1,    0.2),
  650.   ctlpt(e3,    1.9,    8.5,    0.2),
  651.   ctlpt(e3,    1.6,    9,    0.2)
  652. ),list(
  653.   ctlpt(e3,    0.0,    0,    0),
  654.   ctlpt(e3,    2.8,    0.8,    0),
  655.   ctlpt(e3,    3.5,    2,    0),
  656.   ctlpt(e3,    3.5,    5,    0),
  657.   ctlpt(e3,    2.2,    7.1,    0),
  658.   ctlpt(e3,    1.8,    8.5,    0),
  659.   ctlpt(e3,    1.5,    9,    0)
  660. )
  661. );
  662.  
  663. head_top_mesh_m = list(
  664. list(
  665.   ctlpt(e3,    -0.0,    0,    0),
  666.   ctlpt(e3,    -2.8,    0.8,    0),
  667.   ctlpt(e3,    -3.5,    2,    0),
  668.   ctlpt(e3,    -3.5,    5,    0),
  669.   ctlpt(e3,    -2.2,    7.1,    0),
  670.   ctlpt(e3,    -1.8,    8.5,    0),
  671.   ctlpt(e3,    -1.5,    9,    0)
  672. ),list(
  673.   ctlpt(e3,    -0.0,    -1,    0.1),
  674.   ctlpt(e3,    -3.0,    -0.8,    0.2),
  675.   ctlpt(e3,    -3.7,    2,    0.2),
  676.   ctlpt(e3,    -3.6,    5,    0.2),
  677.   ctlpt(e3,    -2.4,    7.1,    0.2),
  678.   ctlpt(e3,    -1.9,    8.5,    0.2),
  679.   ctlpt(e3,    -1.6,    9,    0.2)
  680. ),list(
  681.   ctlpt(e3,    -0.0,    -1,    0.2),
  682.   ctlpt(e3,    -2.7,    -0.8,    0.5),
  683.   ctlpt(e3,    -3.4,    2,    0.5),
  684.   ctlpt(e3,    -3.3,    5,    0.5),
  685.   ctlpt(e3,    -2.1,    7.1,    0.5),
  686.   ctlpt(e3,    -1.8,    8.5,    0.5),
  687.   ctlpt(e3,    -1.5,    9,    0.5)
  688. ),list(
  689.   ctlpt(e3,    -0.1,    -1,    0.3),
  690.   ctlpt(e3,    -2.6,    -0.8,    1.1),
  691.   ctlpt(e3,    -3.3,    2,    1.0),
  692.   ctlpt(e3,    -3.4,    5,    1.0),
  693.   ctlpt(e3,    -2.0,    7,    1.0),
  694.   ctlpt(e3,    -1.6,    8.5,    1.0),
  695.   ctlpt(e3,    -1.4,    9,    1.0)
  696. ),list(
  697.   ctlpt(e3,    -0.0,    -1,    0.35),
  698.   ctlpt(e3,    -2.2,    -0.6,    1.2),
  699.   ctlpt(e3,    -2.8,    2.5,    2.7),
  700.   ctlpt(e3,    -2.9,    4,    2.7),
  701.   ctlpt(e3,    -1.8,    6.5,    2.3),
  702.   ctlpt(e3,    -1.2,    8.2,    2.0),
  703.   ctlpt(e3,    -1.3,    9,    1.35)
  704. ),list(
  705.   ctlpt(e3,    -0.0,    -1,    0.118),
  706.   ctlpt(e3,    -1.5,    -0.5,    2.6),
  707.   ctlpt(e3,    -2.4,    2.0,    3.1),
  708.   ctlpt(e3,    -2.6,    4,    2.9),
  709.   ctlpt(e3,    -1.5,    6,    2.2),
  710.   ctlpt(e3,    -1.0,    8,    1.9),
  711.   ctlpt(e3,    -0.9,    9,    1.4)
  712. ),list(
  713.   ctlpt(e3,    -0.18,    -1,    .12),
  714.   ctlpt(e3,    -0.18,    -0.5,    3),
  715.   ctlpt(e3,    -0.18,    2.0,    3.2),
  716.   ctlpt(e3,    -0.18,    4,    3),
  717.   ctlpt(e3,    -0.18,    6,    2.8),
  718.   ctlpt(e3,    -0.18,    8,    2.0),
  719.   ctlpt(e3,    -0.18,    9,    1.5)
  720. ),list(
  721.   ctlpt(e3,    -0,    -1,    .12),
  722.   ctlpt(e3,    -0,    -0.5,    3),
  723.   ctlpt(e3,    -0,    2.0,    3.2),
  724.   ctlpt(e3,    -0,    4,    3),
  725.   ctlpt(e3,    -0,    6,    2.8),
  726.   ctlpt(e3,    -0,    8,    2.0),
  727.   ctlpt(e3,    -0,    9,    1.5)
  728. )
  729. );
  730.  
  731. head_top_half = sbspline(3, 3, head_top_mesh, list(list(KV_OPEN), 
  732.                                list(KV_OPEN)));
  733. head_top_half_m = sbspline(3, 3, head_top_mesh_m, 
  734.                                list(list(KV_OPEN), 
  735.                                list(KV_OPEN)));
  736. free(head_top_mesh);
  737. free(head_top_mesh_m);
  738.  
  739. head_top = list(
  740.   head_top_half,
  741.   head_top_half_m)
  742.   * head_scale_factor * scale(vector(1,1,-1));
  743. head = list(head_top, head_bottom) *
  744. #head = list(head_bottom) *
  745. trans(vector(0,0,-1) * head_scale_factor);
  746. attrib(head, "rgb", "123,0,0");
  747.  
  748. free(head_top_half);
  749. free(head_top_half_m);
  750. free(head_top);
  751. free(head_bottom);
  752.  
  753. ###########################################################################
  754. ###########################################################################
  755. ### the back
  756.  
  757. ######################################
  758. ### the bottom of the back
  759. back_bottom_mesh = list(
  760. list(
  761.   ctlpt(e3,    0,    9,    0.7),
  762.   ctlpt(e3,    0,    10.3,    1.3),
  763.   ctlpt(e3,    0,    11.6,    1.5),
  764.   ctlpt(e3,    0,    12.7,    1.6),
  765.   ctlpt(e3,    0,    13.7,    1.4),
  766.   ctlpt(e3,    0,    14.7,    1.2),
  767.   ctlpt(e3,    0,    16,    0)
  768. ),list(
  769.   ctlpt(e3,    0.9,    9,    0.7),
  770.   ctlpt(e3,    0.1,    10.2,    1.3),
  771.   ctlpt(e3,    0.1,    11.6,    1.5),
  772.   ctlpt(e3,    0.1,    12.7,    1.6),
  773.   ctlpt(e3,    0.1,    13.7,    1.4),
  774.   ctlpt(e3,    0.1,    14.7,    1.2),
  775.   ctlpt(e3,    0.0,    16,    0)
  776. ),list(
  777.   ctlpt(e3,    0.9,    9,    0.7),
  778.   ctlpt(e3,    0.2,    10.2,    1.3),
  779.   ctlpt(e3,    0.2,    11.6,    1.5),
  780.   ctlpt(e3,    0.2,    12.7,    1.6),
  781.   ctlpt(e3,    0.2,    13.7,    1.4),
  782.   ctlpt(e3,    0.2,    14.7,    1.2),
  783.   ctlpt(e3,    0.0,    16,    0)
  784. ),list(
  785.   ctlpt(e3,    0.9,    9,    0.7),
  786.   ctlpt(e3,    0.3,    10.2,    1.3),
  787.   ctlpt(e3,    0.3,    11.6,    1.5),
  788.   ctlpt(e3,    0.3,    12.7,    1.6),
  789.   ctlpt(e3,    0.3,    13.7,    1.4),
  790.   ctlpt(e3,    0.3,    14.7,    1.2),
  791.   ctlpt(e3,    0.0,    16,    0)
  792. ),list(
  793.   ctlpt(e3,    1.3,    9,    0.7),
  794.   ctlpt(e3,    0.8,    10.2,    1.2),
  795.   ctlpt(e3,    0.9,    11.4,    1.4),
  796.   ctlpt(e3,    0.9,    12.6,    1.4),
  797.   ctlpt(e3,    0.7,    14,    1.3),
  798.   ctlpt(e3,    0.5,    15,    1.1),
  799.   ctlpt(e3,    0,    16,    0)
  800. ),list(
  801.   ctlpt(e3,    1.4,    9,    0.1),
  802.   ctlpt(e3,    1.8,    10.2,    0.6),
  803.   ctlpt(e3,    2.2,    11.5,    0.7),
  804.   ctlpt(e3,    2.0,    12.6,    0.75),
  805.   ctlpt(e3,    1.5,    14.3,    0.7),
  806.   ctlpt(e3,    0.8,    15.4,    0.5),
  807.   ctlpt(e3,    0,    16,    0)
  808. ),list(
  809.   ctlpt(e3,    1.5,    9,    0),
  810.   ctlpt(e3,    2.1,    10.1,    0),
  811.   ctlpt(e3,    2.6,    11.3,    0),
  812.   ctlpt(e3,    2.4,    12.8,    0),
  813.   ctlpt(e3,    1.6,    14.5,    0),
  814.   ctlpt(e3,    0.8,    15.6,    0),
  815.   ctlpt(e3,    0,    16,    0)
  816. )
  817. );
  818.  
  819. back_bottom_mesh_m = list(
  820. list(
  821.   ctlpt(e3,    -1.5,    9,    0),
  822.   ctlpt(e3,    -2.1,    10.1,    0),
  823.   ctlpt(e3,    -2.6,    11.3,    0),
  824.   ctlpt(e3,    -2.4,    12.8,    0),
  825.   ctlpt(e3,    -1.6,    14.5,    0),
  826.   ctlpt(e3,    -0.8,    15.6,    0),
  827.   ctlpt(e3,    -0,    16,    0)
  828. ),list(
  829.   ctlpt(e3,    -1.4,    9,    0.1),
  830.   ctlpt(e3,    -1.8,    10.2,    0.6),
  831.   ctlpt(e3,    -2.2,    11.5,    0.7),
  832.   ctlpt(e3,    -2.0,    12.6,    0.75),
  833.   ctlpt(e3,    -1.5,    14.3,    0.7),
  834.   ctlpt(e3,    -0.8,    15.4,    0.5),
  835.   ctlpt(e3,    -0,    16,    0)
  836. ),list(
  837.   ctlpt(e3,    -1.3,    9,    0.7),
  838.   ctlpt(e3,    -0.8,    10.2,    1.2),
  839.   ctlpt(e3,    -0.9,    11.4,    1.4),
  840.   ctlpt(e3,    -0.9,    12.6,    1.4),
  841.   ctlpt(e3,    -0.7,    14,    1.3),
  842.   ctlpt(e3,    -0.5,    15,    1.1),
  843.   ctlpt(e3,    -0,    16,    0)
  844. ),list(
  845.   ctlpt(e3,    -0.9,    9,    0.7),
  846.   ctlpt(e3,    -0.3,    10.2,    1.3),
  847.   ctlpt(e3,    -0.3,    11.6,    1.5),
  848.   ctlpt(e3,    -0.3,    12.7,    1.6),
  849.   ctlpt(e3,    -0.3,    13.7,    1.4),
  850.   ctlpt(e3,    -0.3,    14.7,    1.2),
  851.   ctlpt(e3,    -0.0,    16,    0)
  852. ),list(
  853.   ctlpt(e3,    -0.9,    9,    0.7),
  854.   ctlpt(e3,    -0.2,    10.2,    1.3),
  855.   ctlpt(e3,    -0.2,    11.6,    1.5),
  856.   ctlpt(e3,    -0.2,    12.7,    1.6),
  857.   ctlpt(e3,    -0.2,    13.7,    1.4),
  858.   ctlpt(e3,    -0.2,    14.7,    1.2),
  859.   ctlpt(e3,    -0.0,    16,    0)
  860. ),list(
  861.   ctlpt(e3,    -0.9,    9,    0.7),
  862.   ctlpt(e3,    -0.1,    10.2,    1.3),
  863.   ctlpt(e3,    -0.1,    11.6,    1.5),
  864.   ctlpt(e3,    -0.1,    12.7,    1.6),
  865.   ctlpt(e3,    -0.1,    13.7,    1.4),
  866.   ctlpt(e3,    -0.1,    14.7,    1.2),
  867.   ctlpt(e3,    -0.0,    16,    0)
  868. ),list(
  869.   ctlpt(e3,    -0,    9,    0.7),
  870.   ctlpt(e3,    -0,    10.3,    1.3),
  871.   ctlpt(e3,    -0,    11.6,    1.5),
  872.   ctlpt(e3,    -0,    12.7,    1.6),
  873.   ctlpt(e3,    -0,    13.7,    1.4),
  874.   ctlpt(e3,    -0,    14.7,    1.2),
  875.   ctlpt(e3,    -0,    16,    0)
  876. )
  877. );
  878.  
  879. back_bottom_half = sbspline(3, 3, back_bottom_mesh,
  880.                                   list(list(KV_OPEN), list(KV_OPEN)));
  881. back_bottom_half_m = sbspline(3, 3, back_bottom_mesh_m,
  882.                                     list(list(KV_OPEN),
  883.                     list(KV_OPEN)));
  884. free(back_bottom_mesh);
  885. free(back_bottom_mesh_m);
  886.  
  887. back_bottom = list(
  888.     back_bottom_half,
  889.     back_bottom_half_m)
  890.     * head_scale_factor;
  891.  
  892. free(back_bottom_half);
  893. free(back_bottom_half_m);
  894.  
  895. ######################################
  896. ### the top of the back
  897. back_top_mesh = list(
  898. list(
  899.   ctlpt(e3,    0,    9,    -1.5),
  900.   ctlpt(e3,    0,    10.3,    -1.6),
  901.   ctlpt(e3,    0,    11.6,    -1.8),
  902.   ctlpt(e3,    0,    12.7,    -1.7),
  903.   ctlpt(e3,    0,    13.7,    -1.5),
  904.   ctlpt(e3,    0,    14.7,    -1.2),
  905.   ctlpt(e3,    0,    16,    -0)
  906. ),list(
  907.   ctlpt(e3,    0.18,    9,    -1.5),
  908.   ctlpt(e3,    0.1,    10.2,    -1.6),
  909.   ctlpt(e3,    0.1,    11.6,    -1.8),
  910.   ctlpt(e3,    0.1,    12.7,    -1.7),
  911.   ctlpt(e3,    0.1,    13.7,    -1.5),
  912.   ctlpt(e3,    0.1,    14.7,    -1.2),
  913.   ctlpt(e3,    0.0,    16,    -0)
  914. ),list(
  915.   ctlpt(e3,    0.9,    9,    -1.4),
  916.   ctlpt(e3,    0.2,    10.2,    -1.6),
  917.   ctlpt(e3,    0.2,    11.6,    -1.8),
  918.   ctlpt(e3,    0.2,    12.7,    -1.7),
  919.   ctlpt(e3,    0.2,    13.7,    -1.5),
  920.   ctlpt(e3,    0.2,    14.7,    -1.2),
  921.   ctlpt(e3,    0.0,    16,    -0)
  922. ),list(
  923.   ctlpt(e3,    1.3,    9,    -1.35),
  924.   ctlpt(e3,    0.3,    10.2,    -1.5),
  925.   ctlpt(e3,    0.3,    11.6,    -1.55),
  926.   ctlpt(e3,    0.3,    12.7,    -1.7),
  927.   ctlpt(e3,    0.3,    13.7,    -1.5),
  928.   ctlpt(e3,    0.3,    14.7,    -1.2),
  929.   ctlpt(e3,    0.0,    16,    -0)
  930. ),list(
  931.   ctlpt(e3,    1.4,    9,    -1.0),
  932.   ctlpt(e3,    0.4,    10.2,    -1.5),
  933.   ctlpt(e3,    0.4,    11.6,    -1.6),
  934.   ctlpt(e3,    0.4,    12.7,    -1.7),
  935.   ctlpt(e3,    0.4,    13.7,    -1.5),
  936.   ctlpt(e3,    0.4,    14.7,    -1.2),
  937.   ctlpt(e3,    0.0,    16,    -0)
  938. ),list(
  939.   ctlpt(e3,    1.5,    9,    -0.5),
  940.   ctlpt(e3,    0.8,    10.2,    -1.2),
  941.   ctlpt(e3,    0.9,    11.4,    -1.4),
  942.   ctlpt(e3,    0.9,    12.6,    -1.4),
  943.   ctlpt(e3,    0.7,    14,    -1.3),
  944.   ctlpt(e3,    0.5,    15,    -1.1),
  945.   ctlpt(e3,    0,    16,    -0)
  946. ),list(
  947.   ctlpt(e3,    1.6,    9,    -0.2),
  948.   ctlpt(e3,    1.8,    10.2,    -0.6),
  949.   ctlpt(e3,    2.2,    11.5,    -0.7),
  950.   ctlpt(e3,    2.0,    12.6,    -0.75),
  951.   ctlpt(e3,    1.5,    14.3,    -0.7),
  952.   ctlpt(e3,    0.8,    15.4,    -0.5),
  953.   ctlpt(e3,    0,    16,    -0)
  954. ),list(
  955.   ctlpt(e3,    1.5,    9,    -0),
  956.   ctlpt(e3,    2.1,    10.1,    -0),
  957.   ctlpt(e3,    2.6,    11.3,    -0),
  958.   ctlpt(e3,    2.4,    12.8,    -0),
  959.   ctlpt(e3,    1.6,    14.5,    -0),
  960.   ctlpt(e3,    0.8,    15.6,    -0),
  961.   ctlpt(e3,    0,    16,    -0)
  962. )
  963. );
  964.  
  965. back_top_mesh_m = list(
  966. list(
  967.   ctlpt(e3,    -1.5,    9,    -0),
  968.   ctlpt(e3,    -2.1,    10.1,    -0),
  969.   ctlpt(e3,    -2.6,    11.3,    -0),
  970.   ctlpt(e3,    -2.4,    12.8,    -0),
  971.   ctlpt(e3,    -1.6,    14.5,    -0),
  972.   ctlpt(e3,    -0.8,    15.6,    -0),
  973.   ctlpt(e3,    -0,    16,    -0)
  974. ),list(
  975.   ctlpt(e3,    -1.6,    9,    -0.2),
  976.   ctlpt(e3,    -1.8,    10.2,    -0.6),
  977.   ctlpt(e3,    -2.2,    11.5,    -0.7),
  978.   ctlpt(e3,    -2.0,    12.6,    -0.75),
  979.   ctlpt(e3,    -1.5,    14.3,    -0.7),
  980.   ctlpt(e3,    -0.8,    15.4,    -0.5),
  981.   ctlpt(e3,    -0,    16,    -0)
  982. ),list(
  983.   ctlpt(e3,    -1.5,    9,    -0.5),
  984.   ctlpt(e3,    -0.8,    10.2,    -1.2),
  985.   ctlpt(e3,    -0.9,    11.4,    -1.4),
  986.   ctlpt(e3,    -0.9,    12.6,    -1.4),
  987.   ctlpt(e3,    -0.7,    14,    -1.3),
  988.   ctlpt(e3,    -0.5,    15,    -1.1),
  989.   ctlpt(e3,    -0,    16,    -0)
  990. ),list(
  991.   ctlpt(e3,    -1.4,    9,    -1.0),
  992.   ctlpt(e3,    -0.4,    10.2,    -1.5),
  993.   ctlpt(e3,    -0.4,    11.6,    -1.6),
  994.   ctlpt(e3,    -0.4,    12.7,    -1.7),
  995.   ctlpt(e3,    -0.4,    13.7,    -1.5),
  996.   ctlpt(e3,    -0.4,    14.7,    -1.2),
  997.   ctlpt(e3,    -0.0,    16,    -0)
  998. ),list(
  999.   ctlpt(e3,    -1.3,    9,    -1.35),
  1000.   ctlpt(e3,    -0.3,    10.2,    -1.5),
  1001.   ctlpt(e3,    -0.3,    11.6,    -1.55),
  1002.   ctlpt(e3,    -0.3,    12.7,    -1.7),
  1003.   ctlpt(e3,    -0.3,    13.7,    -1.5),
  1004.   ctlpt(e3,    -0.3,    14.7,    -1.2),
  1005.   ctlpt(e3,    -0.0,    16,    -0)
  1006. ),list(
  1007.   ctlpt(e3,    -0.9,    9,    -1.4),
  1008.   ctlpt(e3,    -0.2,    10.2,    -1.6),
  1009.   ctlpt(e3,    -0.2,    11.6,    -1.8),
  1010.   ctlpt(e3,    -0.2,    12.7,    -1.7),
  1011.   ctlpt(e3,    -0.2,    13.7,    -1.5),
  1012.   ctlpt(e3,    -0.2,    14.7,    -1.2),
  1013.   ctlpt(e3,    -0.0,    16,    -0)
  1014. ),list(
  1015.   ctlpt(e3,    -0.18,    9,    -1.5),
  1016.   ctlpt(e3,    -0.1,    10.2,    -1.6),
  1017.   ctlpt(e3,    -0.1,    11.6,    -1.8),
  1018.   ctlpt(e3,    -0.1,    12.7,    -1.7),
  1019.   ctlpt(e3,    -0.1,    13.7,    -1.5),
  1020.   ctlpt(e3,    -0.1,    14.7,    -1.2),
  1021.   ctlpt(e3,    -0.0,    16,    -0)
  1022. ),list(
  1023.   ctlpt(e3,    -0,    9,    -1.5),
  1024.   ctlpt(e3,    -0,    10.3,    -1.6),
  1025.   ctlpt(e3,    -0,    11.6,    -1.8),
  1026.   ctlpt(e3,    -0,    12.7,    -1.7),
  1027.   ctlpt(e3,    -0,    13.7,    -1.5),
  1028.   ctlpt(e3,    -0,    14.7,    -1.2),
  1029.   ctlpt(e3,    -0,    16,    -0)
  1030. )
  1031. );
  1032.  
  1033. back_top_half = sbspline(3, 3, back_top_mesh, 
  1034.                                list(list(KV_OPEN), list(KV_OPEN)));
  1035.  
  1036. back_top_half_m = sbspline(3, 3, back_top_mesh_m,
  1037.                                  list(list(KV_OPEN), list(KV_OPEN)));
  1038.  
  1039. free(back_top_mesh);
  1040. free(back_top_mesh_m);
  1041.  
  1042. attrib(back_top_half, "rgb", "122,0,0");
  1043. attrib(back_top_half_m, "rgb", "122,0,0");
  1044.  
  1045. back_top = list(
  1046.   back_top_half * scale(vector(-1,1,1)),
  1047.   back_top_half_m * scale(vector(-1,1,1)))
  1048.   * head_scale_factor;
  1049. back = list(back_top, back_bottom)
  1050.      * trans( vector(0,-9,0)*head_scale_factor ) * scale(vector(1,1.3,1))
  1051.      * trans( vector(0,9,0)*head_scale_factor )
  1052.      * scale(vector(-1,1,1)) * trans(vector(0,0,-1) * head_scale_factor);
  1053.  
  1054. free(back_top);
  1055. free(back_bottom);
  1056.  
  1057. ###############################################################################
  1058. ###############################################################################
  1059. ### eyes
  1060.  
  1061. eye1 = sphere(vector(0.45,0.15,-0.6),0.1);
  1062. eye2 = sphere(vector(0.35,-0.05,-0.4),0.065);
  1063. eye3 = sphere(vector(0.25,-0.08,-0.55),0.04);
  1064. eye4 = sphere(vector(0.1,-0.1,-0.52),0.04);
  1065.  
  1066. eye1_m = sphere(vector(-0.45,0.15,-0.6),0.1);
  1067. eye2_m = sphere(vector(-0.35,-0.05,-0.4),0.065);
  1068. eye3_m = sphere(vector(-0.25,-0.08,-0.55),0.04);
  1069. eye4_m = sphere(vector(-0.1,-0.1,-0.52),0.04);
  1070.  
  1071. attrib(eye1, "rgb", "0,0,0");
  1072. attrib(eye2, "rgb", "0,0,0");
  1073. attrib(eye3, "rgb", "0,0,0");
  1074. attrib(eye4, "rgb", "0,0,0");
  1075.  
  1076. attrib(eye1_m, "rgb", "0,0,0");
  1077. attrib(eye2_m, "rgb", "0,0,0");
  1078. attrib(eye3_m, "rgb", "0,0,0");
  1079. attrib(eye4_m, "rgb", "0,0,0");
  1080.  
  1081. ######################################
  1082. ### all the legs
  1083. leg_offset_scale_factor = head_scale_factor * scale(vector(0.95,0.95,-0.5));
  1084.  
  1085. leg0_offset = vector(2.3,1.4,1) * leg_offset_scale_factor;
  1086. leg1_offset = vector(2.9,2,1) * leg_offset_scale_factor;
  1087. leg2_offset = vector(3.0,5,1) * leg_offset_scale_factor;
  1088. leg3_offset = vector(2.4,7,1) * leg_offset_scale_factor;
  1089. leg4_offset = vector(1.9,8.2,1) * leg_offset_scale_factor;
  1090.  
  1091. leg0_offset_m = vector(-2.3,1.4,1) * leg_offset_scale_factor;
  1092. leg1_offset_m = vector(-2.9,2,1) * leg_offset_scale_factor;
  1093. leg2_offset_m = vector(-3.0,5,1) * leg_offset_scale_factor;
  1094. leg3_offset_m = vector(-2.4,7,1) * leg_offset_scale_factor;
  1095. leg4_offset_m = vector(-1.9,8.2,1) * leg_offset_scale_factor;
  1096.  
  1097. jaw_offset = vector(0.26,-0.05,-0.3);
  1098. jaw_trans = scale(vector(0.6,0.6,0.6)) * trans(jaw_offset);
  1099. jaw_offset_m = vector(-0.26,-0.05,-0.3);
  1100. jaw_trans_m = scale(vector(0.6,0.6,0.6)) * trans(jaw_offset_m);
  1101.  
  1102. legs = list(
  1103.        leg0 * trans(leg0_offset),
  1104.        leg0_m * trans(leg0_offset_m),
  1105.        leg1 * trans(leg1_offset),
  1106.        leg1_m * trans(leg1_offset_m),
  1107.        leg2 * trans(leg2_offset),
  1108.        leg2_m * trans(leg2_offset_m),
  1109.        leg3 * trans(leg3_offset),
  1110.        leg3_m * trans(leg3_offset_m),
  1111.        leg4 * trans(leg4_offset),
  1112.        leg4_m * trans(leg4_offset_m)
  1113. );
  1114. attrib(legs, "reflect", 0.2);
  1115.  
  1116. eyes = list(
  1117.        eye1,
  1118.        eye1_m,
  1119.        eye2,
  1120.        eye2_m,
  1121.        eye3,
  1122.        eye3_m,
  1123.        eye4,
  1124.        eye4_m
  1125. );
  1126. attrib(eyes, "reflect", 0.8);
  1127.  
  1128. jaws = list(
  1129.        jaw * jaw_trans,
  1130.        jaw_m * jaw_trans_m
  1131. );
  1132.  
  1133. attrib(head, "texture", "image texture1.ppm");
  1134. spider = list(
  1135.        head,
  1136.        back,
  1137.  
  1138.        legs,
  1139.        jaws,
  1140.        eyes
  1141. );
  1142. #view(spider, true);
  1143. #attrib(spider, "resolution", 3);
  1144.  
  1145.  
  1146. #############################################################
  1147. #############################################################
  1148. ### net
  1149.  
  1150. step = 30;
  1151. rotstepz = rotz(step);
  1152.  
  1153. net_seg = poly(list(vector(0,0.,0), vector(0,4.,0)), true);
  1154.  
  1155. net = net_seg;
  1156.  
  1157. attrib(net_seg, "rgb", "192,192,192");
  1158.  
  1159. for(
  1160.       0, 30 , 360,
  1161.      net_seg = net_seg * rotstepz :
  1162.      net = net +  net_seg 
  1163.     );
  1164.  
  1165. attrib(net, "rgb", "192,192,192");
  1166.  
  1167. #rotstepz = scale(vector(1,1,1));
  1168. scalestep = scale(vector(1.01,1.01,1.01));
  1169. scalevect = vector(1.01,1.01,1.01);
  1170. currvec = vector(0,0.1,0);
  1171.  
  1172. for( 
  1173.       0, 30, 360 * 15,
  1174.               next_vec = currvec * rotstepz * scale(scalevect) : 
  1175.           net_seg = poly(list(currvec, next_vec), true) * 
  1176.                      rotstepz :
  1177.           currvec = next_vec :
  1178.           scalevect = scalevect + vector(0.0001,0.0001,0.0001):
  1179.           net = net + net_seg          
  1180. );
  1181.  
  1182. ##################################################################
  1183. ###  The corner the spider sits in
  1184.  
  1185. box_p1 = poly(list(
  1186.   vector(0,0,0),
  1187.   vector(6,0,0),
  1188.   vector(6,6,0),
  1189.   vector(0,6,0)
  1190. ),false);
  1191. box_p2 = poly(list(
  1192.   vector(0,0,0),
  1193.   vector(0,6,0),
  1194.   vector(0,6,6),
  1195.   vector(0,0,6)
  1196. ),false);
  1197. box_p3 = poly(list(
  1198.   vector(0,0,0),
  1199.   vector(6,0,0),
  1200.   vector(6,0,6),
  1201.   vector(0,0,6)
  1202. ),false);
  1203.  
  1204. corner = box_p1 + box_p2 + box_p3;
  1205. #attrib(corner, "texture", "wood");
  1206. attrib(corner, "rgb", "200,100,100");
  1207.  
  1208. #web = net * roty(45) * rotvec(vector(1,0,-1),-45) * trans(vector(3.1,3.1,3.1));
  1209. #web = net * roty(45) * trans(vector(3,3,3));
  1210.  
  1211. web_trans = roty(45) * rotvec(vector(1,0,-1),135) * trans(vector(3.1,3.1,3.1));
  1212. spider_on_web = list(
  1213.   spider * scale(vector(0.6,0.6,0.6)) * trans(vector(0,0,-0.08)), 
  1214.   net);
  1215.  
  1216. attrib(corner, "texture", "wood,1");
  1217. scene = list(corner, spider_on_web * web_trans);
  1218. #view(scene, true);
  1219.  
  1220. #save("scene.dat", scene);
  1221.  
  1222. #save("spider.dat", spider);
  1223.